技術問答
技術文章
iT 徵才
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2024 iThome 鐵人賽
DAY
30
0
佛心分享-IT 人自學之術
Python學習馬拉松:30天挑戰
系列 第
30
篇
Day30. 實作練習:馬可夫鏈文本生成器 Markov Chain Text Composer
16th鐵人賽
sheep
2024-10-14 14:56:40
689 瀏覽
分享至
教學來源:https://www.youtube.com/watch?v=8ext9G7xspg
這個專案是一個基於馬可夫鏈(Markov Chain)的文本生成器,透過分析文本中的單詞之間的關聯,來生成新文本。
➤ 馬可夫鏈文本生成器的核心概念是透過「當前狀態」來決定「下一個狀態」,在這裡,狀態指的是一個單詞。換句話說,這個程式的目標是根據已知文本中單詞的排列規則,模擬生成類似的文本。
程式碼:
➤ compose.py:
➤ graph.py:
執行3次程式碼的結果:
程式說明:
➤ compose.py:
get_words_from_text函數:
-從給定的文本檔案中讀取內容,去除標點符號,將文本轉換為小寫,並分割成最多 1000 個單詞的列表。
make_graph函數:
-建立一個圖(Graph)來表示單詞之間的關聯。每個單詞是圖中的一個節點(Vertex),如果兩個單詞在文本中連續出現,則在它們之間建立一條邊,邊的權重表示它們一起出現的頻率。
-該圖的功能是幫助後續生成文本時,根據單詞的出現頻率來預測下一個單詞。
compose函數:
-使用生成的圖,隨機選擇一個單詞作為起點,並根據圖中節點之間的關聯逐步生成文本。文本的長度由 length 參數決定(默認為 50 個單詞)。
main函數:
-讀取指定文本檔案,提取單詞,建立單詞之間的關聯圖,並最終生成一段隨機文本。
➤ graph.py:
Vertex 類別:
-圖中的節點,表示一個單詞。每個節點都有一個 adjacent 字典,用來儲存與其他單詞的關聯及其權重。當兩個單詞一起出現時,增加它們之間邊的權重。
-還包含一個方法 next_word(),用來根據關聯單詞的權重,隨機選擇下一個單詞。
Graph 類別:
-圖結構,用來管理所有單詞及它們之間的關聯。每個單詞都是圖中的一個節點,可以根據關聯性預測下一個單詞。
-generate_probability_mappings 用來為每個單詞生成一個概率映射,讓文本生成器根據權重來選擇下一個單詞。
留言
追蹤
檢舉
上一篇
Day29. 實作練習:圈圈叉叉Tic-Tac-Toe --AI
系列文
Python學習馬拉松:30天挑戰
共
30
篇
目錄
RSS系列文
訂閱系列文
2
人訂閱
26
Day26. 實作練習:Binary Search
27
Day27. 實作練習:踩地雷遊戲 Minesweeper
28
Day28. 實作練習:數獨解決器Sudoku Solver
29
Day29. 實作練習:圈圈叉叉Tic-Tac-Toe --AI
30
Day30. 實作練習:馬可夫鏈文本生成器 Markov Chain Text Composer
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
19848
篇
完賽人數
528
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
FortiGate SSLVPN替代方案?
AARQ 通訊協議是?
SSLVPN 轉 IPSEC VPN 的問題
Dell or Asus 伺服器,哪牌比較好?
Dell or Asus Storage 或NAS,哪牌比較好?
將硬碟上的 EFI 分割區複製到固態硬碟後,ARM 架構的 Ubuntu Server 無法啟動
iT邦幫忙如何搜尋 關鍵字?
sdray vigor2927 sslvpn ip設定問題
Qnap帳號於同一個IP反覆登入失敗.
熱門回答
FortiGate SSLVPN替代方案?
Qnap帳號於同一個IP反覆登入失敗.
Dell or Asus 伺服器,哪牌比較好?
將硬碟上的 EFI 分割區複製到固態硬碟後,ARM 架構的 Ubuntu Server 無法啟動
iT邦幫忙如何搜尋 關鍵字?
熱門文章
人工智慧模型 LLM (單一模型) 與 人工智慧代理 AI Agent(人工智慧代理)是什麼?兩者之間的關鍵差異?
c++的.h和cpp,放在相同目錄下好,還是頂層就用include,src分開好? [搬運/問答]
你的產品用了多少開源軟體?如何掌握潛在漏洞與風險?
別再只是做報表了,真正的人資資料分析是這樣做的
AI 音樂創作指令(Prompt)深度指南:解鎖主流AI 音樂生成工具的全部潛力
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}